/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.controlador;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.MathContext;
import java.util.Date;
import java.util.Iterator;
import javax.faces.event.ActionEvent;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import pe.com.cotelasa.common.controlador.MBGenerico;
import pe.com.cotelasa.scp.controlador.backingBean.BKCosteoImportacion;
import pe.com.cotelasa.scp.dominio.common.Constantes;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.entidad.GastoAduana;
import pe.com.cotelasa.scp.entidad.Proveedor;
import pe.com.cotelasa.seguridad.controlador.backingBean.BKSession;

/**
 *
 * @author WINDOWS 7
 */
@Named(value = "MBGastoAduana")
@Scope("request")
public class MBGastoAduana extends MBGenerico implements Serializable {
    private static Logger logger = Logger.getLogger(MBGastoAduana.class);
    @Autowired
    BKSession session;
    @Inject
    private BKCosteoImportacion bk;
    
    
    public void eliminarGastoAduana(ActionEvent actionEvent) {

        GastoAduana gastoEliminado = this.bk.getGastoAduanaSeleccionado();

        if (gastoEliminado.getId() == null) {
            Iterator itr = this.bk.getListaGastoAduana().iterator();
            while (itr.hasNext()) {
                GastoAduana cont = (GastoAduana) itr.next();
                if (gastoEliminado.getDocumento().equals(cont.getDocumento())) {
                    itr.remove();
                    break;
                }
            }
        } else {

            this.bk.getListaGastoAduana().remove(gastoEliminado);

            Integer index = bk.getListaGastoAduanaEditar().indexOf(gastoEliminado);
            gastoEliminado.setEstadoRegistro(ESTADO_REGISTRO.INACTIVO.getValor());
            gastoEliminado.setFecModificacion(new Date());
            gastoEliminado.setUsrModificacion(session.getUsuario().getUsuario());
            this.bk.getListaGastoAduanaEditar().set(index, gastoEliminado);
        }
    }

    public void agregarGastoAduana(ActionEvent actionEvent) {
        GastoAduana gastoAgregado = this.bk.getGastoAduanaFormulario();

        gastoAgregado.setUsrCreacion(session.getUsuario().getUsuario());
        gastoAgregado.setFecCreacion(new Date());
        gastoAgregado.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
        /*try {
            gastoAgregado.setIdTipoGastoAduana(servicioTipoGastoAduana.conseguirTipoGastoAduanaPorId(this.bk.getTipoGastoAduana()));

        } catch (ServiceException e) {
            mostrarError("Ocurrieron algunos problemas al guardar la informacion. Vuelva a intentar.");
            System.err.println(e);
            e.printStackTrace();
            logger.error(e.getMessage(), e);
        }*/
        if(bk.getGastoAduanaFormulario().getIdMoneda().getId() == Constantes.TipoMoneda.DOLARES){
            bk.getGastoAduanaFormulario().setTipoCambio(null);
            bk.getGastoAduanaFormulario().setTotalSoles(null);
        }else{
            bk.getGastoAduanaFormulario().setTotalSoles(bk.getGastoAduanaFormulario().getTotalDolares());
            bk.getGastoAduanaFormulario().setTotalDolares(bk.getGastoAduanaFormulario().getTotalSoles().divide(bk.getGastoAduanaFormulario().getTipoCambio(), MathContext.DECIMAL32));
        }
        if(bk.getGastoAduanaFormulario().getTieneIgv() == 1){
            bk.getGastoAduanaFormulario().setIgv(bk.getGastoAduanaFormulario().getTotalDolares().multiply(bk.getIgv()));
            bk.getGastoAduanaFormulario().setTotal(bk.getGastoAduanaFormulario().getIgv().add(bk.getGastoAduanaFormulario().getTotalDolares()));
        }else{
            bk.getGastoAduanaFormulario().setTotal(bk.getGastoAduanaFormulario().getTotalDolares());
        }
        
        
        boolean band = false;
        for (GastoAduana cont : this.bk.getListaGastoAduana()) {
            if (gastoAgregado.getDocumento().equals(cont.getDocumento())) {
                band = true;
                break;
            }
        }

        if (band) {
            mostrarError("Ya se agrego el documento: " + gastoAgregado.getDocumento());
        } else {
            this.bk.getListaGastoAduana().add(gastoAgregado);
            this.bk.getListaGastoAduanaEditar().add(gastoAgregado);
            this.bk.setGastoAduanaFormulario(new GastoAduana());
            this.bk.getGastoAduanaFormulario().setIdProveedor(new Proveedor());
        }
        
        calcularTotal();
    }

    /*public void editarGastoAduana(RowEditEvent event) {
        GastoAduana gastoEditado = (GastoAduana) event.getObject();
        Integer index = bk.getListaGastoAduanaEditar().indexOf(gastoEditado);
        
        try {
            //TipoGastoAduana tipo = );
            gastoEditado.setIdTipoGastoAduana(servicioTipoGastoAduana.conseguirTipoGastoAduanaPorId(gastoEditado.getIdTipoGastoAduana().getId()));
        } catch (ServiceException e) {
            mostrarError("Ocurrieron algunos problemas al guardar la informacion. Vuelva a intentar.");
            System.err.println(e);
            e.printStackTrace();
            logger.error(e.getMessage(), e);
        }

        if (gastoEditado.getId() != null) {
            gastoEditado.setUsrModificacion(session.getUsuario().getUsuario());
            gastoEditado.setFecModificacion(new Date());
        }

        this.bk.getListaGastoAduanaEditar().set(index, gastoEditado);
    }*/
    
    public boolean habilitarTipoCambio(){
        if(bk.getGastoAduanaFormulario().getIdMoneda() != null && bk.getGastoAduanaFormulario().getIdMoneda().getId() == Constantes.TipoMoneda.SOLES){
            return false;
        }else{
            return true;
        }
    
    }
    
    public void calcularTotal(){
        BigDecimal total = BigDecimal.ZERO;
        for(GastoAduana gasto:bk.getListaGastoAduana()){
            total = total.add(gasto.getTotal());
        }
        bk.getCosteoFormulario().setAduana(total);
        
        /*calular los detalles de los articulos costeo.
         * for(){
        
        }*/
    }
    
}
